package com.unlcn.ils.kas.service.util;

import org.apache.poi.hssf.usermodel.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.text.SimpleDateFormat;
import java.util.*;

/**
 * excel 工具类
 * @author 罗必量
 */
public class ExcelUtil extends ExcelCommon{

    private static final Logger LOGGER = LoggerFactory.getLogger(ExcelUtil.class);

    /**
     * 导出excel
     * @param fileName   excel名称
     * @param titles     表头
     * @param list       数据
     * @param mappering  映射关系
     */
    public static HSSFWorkbook export(String fileName, String[] titles,
                                      List<?> list, Map<String, Object> mappering) {

        // 新建excel报表
        HSSFWorkbook excel = new HSSFWorkbook();
        // 获取样式
        HSSFCellStyle style = createCellStyle(excel);
        // 添加一个sheet
        HSSFSheet hssfSheet = excel.createSheet(fileName);

        // 创建表头
        HSSFRow titleRow = hssfSheet.createRow(0);
        for (int i=0; titles.length>i; i++) {
            String title = titles[i];
            // 第一行创建第一个单元格
            HSSFCell hssfCell = titleRow.createCell(i);
            // 设置第一个单元格的值
            hssfCell.setCellValue(title);
            // 设置表头样式
            hssfCell.setCellStyle(style);
            // 设置宽度
            hssfSheet.setColumnWidth(i, (int)35.7*100);
        }

        // 添加内容
        int num = 1;
        for (Object obj : list) {
            HSSFRow contentRow = hssfSheet.createRow(num);

            // 获取obj的所有属性
            List<String> attributeList = getAttributeName(obj);
            // 获取映射map的所有健值
            List<String> keyList = getMapKey(mappering);
            // 获取映射map的所有值
            List<String> valList = getMapVal(mappering);

            for(int i=0; titles.length>i; i++) {
                for (int j=0; valList.size()>j; j++) {
                    if (titles[i].trim().equals(valList.get(j).trim())) {
                        HSSFCell contentCell = contentRow.createCell(i);
                        contentCell.setCellValue(getFieldValueByFieldName(obj, keyList.get(j)).toString());
                    }
                }

            }

            num ++ ;
         }

         return excel;
    }
}
